﻿using Kavaa.Modules.PortailMedical.Entity;
using Kavaa.Modules.PortailMedical.Interface;
using Kavaa.Modules.PortailMedical.Presentation.Models;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;
using System.Web.Mvc;

namespace Kavaa.Modules.PortailMedical.Presentation.Controllers
{
    public class CliniqueController : Controller
    {
        //
        // GET: /Clinique/
        public ActionResult Index()
        {
            return View();
        }
        public ActionResult AccueilClinique()
        {
            return View();
        }
        public ActionResult Deconnexion()
        {
            // TestController.userlogged = null;
            Utilisateur userConnecte = (Utilisateur)(Session["user"]);
            userConnecte = null;
            Session["user"] = null;
            return RedirectToAction("SignIn", "Test");
        }
        public ActionResult Reservations()
        {
            return View();
        }
        [HttpPost]
        public ActionResult GetReservCliniqueAccordees()
        {
            Utilisateur user = (Utilisateur)(Session["user"]);
            Reservations Reservations = Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.GetReservCliniqueAccordees(user.Acteur.Id);
            List<Reservation> reservs = new List<Reservation>();

            reservs = Reservations;

            return Json(reservs.ToArray(), JsonRequestBehavior.AllowGet);
        }
        [HttpPost]
        public ActionResult GetReservCliniqueEnCours()
        {
            Utilisateur user = (Utilisateur)(Session["user"]);
            Reservations Reservations = Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.GetReservCliniqueEnCours(user.Acteur.Id);
            List<Reservation> reservs = new List<Reservation>();
            reservs = Reservations;
            return Json(reservs.ToArray(), JsonRequestBehavior.AllowGet);
        }
        [HttpPost]
        public String GetBlocReserv(int reservId)
        {

            String bloc = Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.GetBlocReserv(reservId);
            return bloc;
        }
        [HttpPost]
        public void ConfirmReserv(int reservId, string mail)
        {
            ////////////////////////////////////////////////////////////////////
            Utilisateur user = (Utilisateur)(Session["user"]);
            string emailFrom = user.Email;
            string password = user.PasswordMail;
            string emailTo = mail;
            string fileAttachmentPath = @"C:\itil.txt";
            int result = -1;


            try
            {
                IMail client = new Kavaa.Modules.PortailMedical.Services.Mail();

                List<FileAttachment> allAttachments = new List<FileAttachment>();
                FileAttachment attachment = new FileAttachment();
                attachment.Info = new FileInfo(fileAttachmentPath);
                attachment.FileContentBase64 = Convert.ToBase64String(System.IO.File.ReadAllBytes(fileAttachmentPath));
                allAttachments.Add(attachment);

                result = client.SendEmail(emailFrom, password, new string[] { emailTo }, null,
                  "Réservation confirmée", "Une réservation vous a été confirmée veuillez consulter votre calendrier ", false, allAttachments.ToArray());
                Console.WriteLine("Result: " + result);

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }



            ///////////////////////////////////////////////////////////////////


            Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.ConfirmReserv(reservId);
        }
        [HttpPost]
        public void RejectReserv(int reservId)
        {
            Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.RejectReserv(reservId);
        }
        public PartialViewResult Accreditations()
        {
            Utilisateur user = (Utilisateur)(Session["user"]);
            Accreditations Accreditations = Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.GetAccreditationsAttente(user.Acteur.Id);



            return PartialView(Accreditations);
        }
        [HttpPost]
        public void ConfirmAccredit(int idAccredit)
        {
            Utilisateur user = (Utilisateur)(Session["user"]);

            Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.UpdateEtatAccredit(1, idAccredit);
            Accreditations Accreditations1 = Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.GetAccreditationsAttente(user.Acteur.Id);


        }
        [HttpPost]
        public void RejectAccredit(int idAccredit)
        {
            Utilisateur user = (Utilisateur)(Session["user"]);
            Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.UpdateEtatAccredit(2, idAccredit);
            Accreditations Accreditations2 = Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.GetAccreditationsAttente(user.Acteur.Id);

        }
        public ActionResult TraiterAccredit()
        {
            Utilisateur user = (Utilisateur)(Session["user"]);
            Accreditations Accreditations = Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.GetAccreditationsAttente(user.Acteur.Id);



            return PartialView(Accreditations);
        }
        public ActionResult ComptesClinique()
        {
            if (Session["user"] != null)
            {
                Utilisateur user = (Utilisateur)(Session["user"]);
                Utilisateurs users = Kavaa.Modules.PortailMedical.Presentation.Services.PortailMedical.GetUtilisateurs(user.Acteur.Id);
                return PartialView(users);
            }
            else
            {
                RedirectToAction("SignIn", "test");
            }
            return View();
        }
        [HttpPost]
        public ActionResult CreerUser(MyViewModel model)
        {
            Utilisateur userConnecte = (Utilisateur)(Session["user"]);

            int id = Kavaa.Modules.PortailMedical.Presentation.Services.PortailMedical.AddUtilisateur(model.utilisateur, userConnecte.Acteur.Id);
            Utilisateur user = Kavaa.Modules.PortailMedical.Presentation.Services.PortailMedical.GetUserById(id);

            string emailFrom = userConnecte.Email;
            string password = userConnecte.PasswordMail;
            string emailTo = user.Email;
            string fileAttachmentPath = @"C:\itil.txt";
            int result = -1;
            /////////////////////Cryptage données////////////////////////////

            MD5 md = MD5.Create();
            byte[] data = md.ComputeHash(Encoding.Default.GetBytes(user.login));
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < data.Length; i++)
            {
                sb.Append(data[i].ToString("x2"));
            }
            String login= sb.ToString();



            ///////////////////////////////////////////////////

            try
            {
                IMail client = new Kavaa.Modules.PortailMedical.Services.Mail();

                List<FileAttachment> allAttachments = new List<FileAttachment>();
                FileAttachment attachment = new FileAttachment();
                attachment.Info = new FileInfo(fileAttachmentPath);
                attachment.FileContentBase64 = Convert.ToBase64String(System.IO.File.ReadAllBytes(fileAttachmentPath));
                allAttachments.Add(attachment);

                result = client.SendEmail(emailFrom, password, new string[] { emailTo }, null,
                  "It works!!!", "Votre login: " + user.login + "_ Votre mot de passe:" + user.motPasse+" votre login crypté:"+login, false, allAttachments.ToArray());
                Console.WriteLine("Result: " + result);

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }


            return RedirectToAction("ComptesClinique");
        }
        [HttpGet]
        public ActionResult UpdateUser(int idUtilisateur, string nom, string prenom, string fonction, string telephone, string email)
        {
            // Utilisateur userConnecte = TestController.userlogged;
            Utilisateur userConnecte = (Utilisateur)(Session["user"]);

            foreach (Utilisateur user in Kavaa.Modules.PortailMedical.Presentation.Services.PortailMedical.GetUtilisateurs(userConnecte.Acteur.Id))
            {
                if (user.Id == idUtilisateur)
                {
                    Kavaa.Modules.PortailMedical.Presentation.Services.PortailMedical.UpdateUtilisateur(idUtilisateur, nom, prenom, fonction, telephone, email);

                }

            }

            return RedirectToAction("ComptesClinique");
        }
        [HttpPost]
        public ActionResult DeleteUtilisateur(int[] selectedusers)
        {

            //  Utilisateur userConnecte = TestController.userlogged;
            Utilisateur userConnecte = (Utilisateur)(Session["user"]);
            foreach (int nameID in selectedusers)
            {
                foreach (Utilisateur user in Kavaa.Modules.PortailMedical.Presentation.Services.PortailMedical.GetUtilisateurs(userConnecte.Acteur.Id))
                {
                    if (nameID == user.Id)
                    {
                        Kavaa.Modules.PortailMedical.Presentation.Services.PortailMedical.DeleteUtilisateur(nameID);

                    }

                }

            }

            return RedirectToAction("ComptesClinique");
        }
        public ActionResult AdmissionPatient()
        {
            return View();
        }
        public ActionResult AjoutRessource()
        {
            Ressources Ressources = new Ressources();
            Ressources = Kavaa.Modules.PortailMedical.Presentation.Services.PortailMedical.GetRessources();
            ViewBag.ressources = Ressources;
            return View();
          
        }
        public ActionResult ListActeByClinique()
        {
            Actes actes = new Actes();
            Utilisateur userConnecte = (Utilisateur)(Session["user"]);
            actes = Kavaa.Modules.PortailMedical.Presentation.Services.PortailMedical.GetActesByClinique(userConnecte.Acteur.Id);
            return PartialView(actes);
        }
                ////public int SaveRessource(int [] actes, List<string> proprietesname, List<string> proprietesvalue, string categorie, int ressource)
        [HttpPost]
        public int SaveRessource(List<int> actes, List<string> proprietesname, List<string> proprietesvalue, string categorie, int ressource)
        {
            actes = new List<int>();
            proprietesname = new List<string>();
            proprietesvalue = new List<string>();
            proprietesname.Add("oxygène");
            proprietesvalue.Add("non");
            proprietesname.Add("tables");
            proprietesvalue.Add("5");
            actes.Add(1);
       
            Utilisateur user = (Utilisateur)(Session["user"]);
            int idRessourceClinique = Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.SaveRessourceClinique(ressource, user.Acteur.Id);
            int idcategorie = Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.SaveCategorie(categorie, idRessourceClinique);
            for (var i = 0; i < proprietesname.Count; i++)
            {
                Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.SavePropriete(idcategorie, proprietesname[i], proprietesvalue[i]);
            }
            foreach (var s in actes)
            {
                Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.SaveActesCategorie(s, idcategorie);
            }

            return idcategorie;
        }
        public ActionResult RessourceSaved(int idcategorie)
        {
            Utilisateur user = (Utilisateur)(Session["user"]);
            Categories Categories = Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.GetRessourcesClinique(user.Acteur.Id);
            Categories Categories1=new Categories();
            foreach (Categorie cat in Categories)
            {
                if (cat.Id == idcategorie)
                {
                    Categories1.Add(cat);
                }
            
            }
            return PartialView(Categories1);
        }
        public ActionResult GetActesCategorie(int idcat)
        {
            var actes=Kavaa.Modules.PortailMedical.Presentation.Services.PortailMedical.GetActesCategorie(idcat);
            return PartialView(actes);
        }
        [HttpPost]
        public ActionResult InfosAdmissionPatient(int code)
        {
            Reservations Reserv = Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.GetReservationPatient(code);
            String bloc = Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.GetBlocReserv(code);
            ViewBag.bloc = bloc;
            return PartialView(Reserv);
        }

        public ActionResult GererRessources()
        {
            List<Specialite> Specialites = new List<Specialite>();
            Specialites = Kavaa.Modules.PortailMedical.Presentation.Services.PortailMedical.GetSpecialites();
            ViewBag.specialites = Specialites;

            Actes actes = new Actes();
            actes = Kavaa.Modules.PortailMedical.Presentation.Services.PortailMedical.GetActes();

            return View();
        }

        [HttpPost]
        public ActionResult GetActesSpecialite(int specialiteId)
        {
            Actes Actes = Kavaa.Modules.PortailMedical.Presentation.Services.PortailMedical.GetActesSpecialite(specialiteId);
            return PartialView(Actes);

        }
        [HttpPost]
        public void SaveActesClinique(int[] selectedactes)
        {
            Utilisateur user = (Utilisateur)(Session["user"]);
            Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.SaveActeClinique(selectedactes, user.Acteur.Id);
        }

        public ActionResult ListRessourcesClinique()
        {
            Utilisateur user = (Utilisateur)(Session["user"]);
            Categories Categories = Kavaa.Modules.PortailMedical.Presentation.Services.CliniqueService.GetRessourcesClinique(user.Acteur.Id);
            return PartialView(Categories);
        }
    }
}